<template>
  <view
    class="u-divider"
    :style="{
      height: height == 'auto' ? 'auto' : height + 'rpx',
      backgroundColor: bgColor,
      marginBottom: marginBottom + 'rpx',
      marginTop: marginTop + 'rpx',
    }"
    @tap="click"
  >
    <view
      class="u-divider-line"
      :class="[type ? 'u-divider-line--bordercolor--' + type : '']"
      :style="[lineStyle]"
    ></view>
    <view
      v-if="useSlot"
      class="u-divider-text"
      :style="{
        color: color,
        fontSize: fontSize + 'rpx',
      }"
      ><slot
    /></view>
    <view
      class="u-divider-line"
      :class="[type ? 'u-divider-line--bordercolor--' + type : '']"
      :style="[lineStyle]"
    ></view>
  </view>
</template>

<script>
/**
 * divider 分割线
 * @description 区隔内容的分割线，一般用于页面底部"没有更多"的提示。
 * @tutorial https://www.uviewui.com/components/divider.html
 * @property {String Number} half-width 文字左或右边线条宽度，数值或百分比，数值时单位为rpx
 * @property {String} border-color 线条颜色，优先级高于type（默认#dcdfe6）
 * @property {String} color 文字颜色（默认#909399）
 * @property {String Number} fontSize 字体大小，单位rpx（默认26）
 * @property {String} bg-color 整个divider的背景颜色（默认呢#ffffff）
 * @property {String Number} height 整个divider的高度，单位rpx（默认40）
 * @property {String} type 将线条设置主题色（默认primary）
 * @property {Boolean} useSlot 是否使用slot传入内容，如果不传入，中间不会有空隙（默认true）
 * @property {String Number} margin-top 与前一个组件的距离，单位rpx（默认0）
 * @property {String Number} margin-bottom 与后一个组件的距离，单位rpx（0）
 * @event {Function} click divider组件被点击时触发
 * @example <u-divider color="#fa3534">长河落日圆</u-divider>
 */
export default {
  name: 'u-divider',
  props: {
    // 单一边divider横线的宽度(数值)，单位rpx。或者百分比
    halfWidth: {
      type: [Number, String],
      default: 150,
    },
    // divider横线的颜色，如设置，
    borderColor: {
      type: String,
      default: '#dcdfe6',
    },
    // 主题色，可以是primary|info|success|warning|error之一值
    type: {
      type: String,
      default: 'primary',
    },
    // 文字颜色
    color: {
      type: String,
      default: '#909399',
    },
    // 文字大小，单位rpx
    fontSize: {
      type: [Number, String],
      default: 26,
    },
    // 整个divider的背景颜色
    bgColor: {
      type: String,
      default: '#ffffff',
    },
    // 整个divider的高度单位rpx
    height: {
      type: [Number, String],
      default: 'auto',
    },
    // 上边距
    marginTop: {
      type: [String, Number],
      default: 0,
    },
    // 下边距
    marginBottom: {
      type: [String, Number],
      default: 0,
    },
    // 是否使用slot传入内容，如果不用slot传入内容，先的中间就不会有空隙
    useSlot: {
      type: Boolean,
      default: true,
    },
  },
  computed: {
    lineStyle() {
      let style = {}
      if (String(this.halfWidth).indexOf('%') != -1) style.width = this.halfWidth
      else style.width = this.halfWidth + 'rpx'
      // borderColor优先级高于type值
      if (this.borderColor) style.borderColor = this.borderColor
      return style
    },
  },
  methods: {
    click() {
      this.$emit('click')
    },
  },
}
</script>

<style lang="scss" scoped>
@import '../../libs/css/style.components.scss';
.u-divider {
  width: 100%;
  position: relative;
  text-align: center;
  @include vue-flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  flex-direction: row;
}

.u-divider-line {
  border-bottom: 1px solid $u-border-color;
  transform: scale(1, 0.5);
  transform-origin: center;

  &--bordercolor--primary {
    border-color: $u-type-primary;
  }

  &--bordercolor--success {
    border-color: $u-type-success;
  }

  &--bordercolor--error {
    border-color: $u-type-primary;
  }

  &--bordercolor--info {
    border-color: $u-type-info;
  }

  &--bordercolor--warning {
    border-color: $u-type-warning;
  }
}

.u-divider-text {
  white-space: nowrap;
  padding: 0 16rpx;
  /* #ifndef APP-NVUE */
  display: inline-flex;
  /* #endif */
}
</style>
